# 定义AI助手父类
class AIAssistant:
    def __init__(self, aid, name, type_, version, is_online, score):
        self.aid = aid  # 编号（ID）
        self.name = name  # 名称
        self.type_ = type_  # 类型
        self.version = version  # 版本号
        self.is_online = is_online  # 是否在线（True/False）
        self.score = score  # 能力评分（0-100）

    # 转换为字符串，用于打印展示
    def __str__(self):
        status = "🟢在线" if self.is_online else "🔴离线"
        return f"ID: {self.aid}, 名称: {self.name}, 类型: {self.type_}, 版本: {self.version}, 状态: {status}, 能力评分: {self.score} [{self.type_}]"

    # 更新属性的方法
    def update_attr(self, attr, value):
        if attr == "name":
            self.name = value
        elif attr == "type":
            self.type_ = value
        elif attr == "version":
            self.version = value
        elif attr == "online":
            self.is_online = (value == "1")  # 1转为True，0转为False
        elif attr == "score":
            self.score = int(value)
        return True


# 定义AI助手管理器类
class AIManager:
    def __init__(self, max_size=20):
        self.assistants = []  # 存储AI助手的列表（模拟固定大小数组，实际用列表+长度限制）
        self.max_size = max_size  # 最大存储容量

    # 1. 查看所有AI助手列表
    def show_all(self):
        if not self.assistants:
            print("⚠️ 当前系统中暂无AI助手")
            return
        print("\n所有AI助手列表：")
        for idx, assistant in enumerate(self.assistants, 1):
            print(f"{idx}. {assistant}")

    # 2. 根据ID查询助手详情
    def find_by_id(self, aid):
        for assistant in self.assistants:
            if assistant.aid == aid:
                print(f"✅ 查询结果: {assistant}")
                return assistant
        print(f"❌ 未找到ID为{aid}的AI助手")
        return None

    # 3. 添加新的AI助手
    def add_assistant(self):
        if len(self.assistants) >= self.max_size:
            print("⚠️ 系统存储容量已满，无法添加新助手")
            return
        # 获取用户输入
        aid = input("请输入ID: ")
        # 检查ID是否已存在
        if self.find_by_id(aid):
            print("❌ 该ID已存在，添加失败")
            return
        name = input("请输入名称: ")
        type_ = input("请输入类型（数据分析助手/图片生成助手/文本生成助手/翻译助手/语音助手）: ")
        version = input("请输入版本号: ")
        online_input = input("是否在线？(1-是, 0-否): ")
        is_online = (online_input == "1")
        # 处理能力评分输入（确保是0-100的整数）
        while True:
            score_input = input("请输入能力评分(0-100): ")
            if score_input.isdigit() and 0 <= int(score_input) <= 100:
                score = int(score_input)
                break
            print("❌ 评分无效，请输入0-100之间的整数")
        # 创建并添加助手
        new_assistant = AIAssistant(aid, name, type_, version, is_online, score)
        self.assistants.append(new_assistant)
        print(f"✅ 助手【{name}】添加成功！")

    # 4. 根据ID修改助手信息
    def update_assistant(self):
        aid = input("请输入ID: ")
        assistant = self.find_by_id(aid)
        if not assistant:
            return
        # 提示可修改属性
        print("可修改属性列表为：name, type, version, online(1-是/0-否), score")
        while True:
            attr_input = input("请输入要修改的属性和值，用空格分割: ")
            parts = attr_input.strip().split(" ", 1)
            if len(parts) != 2:
                print("❌ 格式错误，请输入'属性 值'（例：score 95）")
                continue
            attr, value = parts[0].lower(), parts[1]
            # 验证属性合法性
            if attr not in ["name", "type", "version", "online", "score"]:
                print("❌ 无效属性，请从可修改列表中选择")
                continue
            # 验证评分和在线状态的值合法性
            if attr == "score" and (not value.isdigit() or not 0 <= int(value) <= 100):
                print("❌ 评分无效，请输入0-100之间的整数")
                continue
            if attr == "online" and value not in ["0", "1"]:
                print("❌ 在线状态无效，请输入1（是）或0（否）")
                continue
            # 执行修改
            assistant.update_attr(attr, value)
            print(f"✅ 助手【{aid}】修改成功！")
            break

    # 5. 删除AI助手（按ID）
    def delete_assistant(self):
        aid = input("请输入要删除的AI助手ID: ")
        for idx, assistant in enumerate(self.assistants):
            if assistant.aid == aid:
                deleted_name = assistant.name
                del self.assistants[idx]
                print(f"✅ 助手【{deleted_name}】已删除。")
                return
        print(f"❌ 未找到ID为{aid}的AI助手，删除失败")

    # 6. 启动AI助手服务
    def start_service(self):
        aid = input("请输入要启动的AI助手ID: ")
        assistant = self.find_by_id(aid)
        if not assistant:
            return
        if assistant.is_online:
            print(f"ℹ️ 助手【{assistant.name}】已在运行。")
        else:
            assistant.is_online = True
            print(f"✅ 助手【{assistant.name}】服务已启动，当前状态：🟢在线")

    # 7. 停止AI助手服务
    def stop_service(self):
        aid = input("请输入要停止的AI助手ID: ")
        assistant = self.find_by_id(aid)
        if not assistant:
            return
        if not assistant.is_online:
            print(f"ℹ️ 助手【{assistant.name}】已处于停止状态。")
        else:
            assistant.is_online = False
            print(f"✅ 助手【{assistant.name}】已停止，当前状态：🔴离线")

    # 8. 为AI助手分配任务
    def assign_task(self):
        aid = input("请输入目标AI助手ID: ")
        assistant = self.find_by_id(aid)
        if not assistant:
            return
        if not assistant.is_online:
            print(f"❌ {assistant.name} 当前离线，无法执行任务。")
            return
        task = input("请输入任务内容: ")
        # 根据助手类型模拟任务响应
        task_responses = {
            "数据分析助手": f"📊 已接收任务：{task}，正在生成数据分析报告...",
            "图片生成助手": f"🖼️ 已接收任务：{task}，正在生成图片...",
            "文本生成助手": f"📝 已接收任务：{task}，正在生成文本内容...",
            "翻译助手": f"🌐 已接收任务：{task}，正在进行翻译...",
            "语音助手": f"🎤 已接收任务：{task}，正在处理语音请求..."
        }
        response = task_responses.get(assistant.type_, f"✅ 已接收任务：{task}，正在执行...")
        print(response)

    # 9. 显示系统统计信息
    def show_statistics(self):
        total = len(self.assistants)
        if total == 0:
            print("\n系统统计信息：")
            print("总助手数: 0")
            print("在线助手数: 0")
            print("离线助手数: 0")
            print("平均能力评分: 0.00")
            return
        # 计算在线数量和平均评分
        online_count = sum(1 for a in self.assistants if a.is_online)
        offline_count = total - online_count
        avg_score = sum(a.score for a in self.assistants) / total
        # 打印统计结果
        print("\n系统统计信息：")
        print(f"总助手数: {total}")
        print(f"在线助手数: {online_count}")
        print(f"离线助手数: {offline_count}")
        print(f"平均能力评分: {avg_score:.2f}")


# 主程序：控制台交互界面
def main():
    print("欢迎使用 AI助手管理器 v1.0")
    manager = AIManager()
    # 初始化默认数据（对应文档中的示例数据）
    default_assistants = [
        AIAssistant("101", "小智", "语音助手", "v1.2", True, 85),
        AIAssistant("102", "文小助", "文本生成助手", "v2.0", True, 92),
        AIAssistant("103", "图灵", "图片生成助手", "v1.5", False, 88),
        AIAssistant("104", "数小析", "数据分析助手", "v1.0", True, 79),
        AIAssistant("105", "翻译精灵", "翻译助手", "v2.1", False, 95)
    ]
    manager.assistants = default_assistants

    # 循环显示菜单
    while True:
        print("\n========== 🤖AI助手管理器 ==========")
        print("1. 查看所有AI助手列表")
        print("2. 根据ID查询助手详情")
        print("3. 添加新的AI助手")
        print("4. 根据ID修改助手信息")
        print("5. 删除AI助手（按ID）")
        print("6. 启动AI助手服务")
        print("7. 停止AI助手服务")
        print("8. 为AI助手分配任务")
        print("9. 显示系统统计信息")
        print("0. 退出系统")
        print("===================================")
        choice = input("请选择操作: ")

        # 根据选择执行对应功能
        if choice == "0":
            print("👋 感谢使用，再见！")
            break
        elif choice == "1":
            manager.show_all()
        elif choice == "2":
            aid = input("请输入要查询的AI助手ID: ")
            manager.find_by_id(aid)
        elif choice == "3":
            manager.add_assistant()
        elif choice == "4":
            manager.update_assistant()
        elif choice == "5":
            manager.delete_assistant()
        elif choice == "6":
            manager.start_service()
        elif choice == "7":
            manager.stop_service()
        elif choice == "8":
            manager.assign_task()
        elif choice == "9":
            manager.show_statistics()
        else:
            print("❌ 无效操作，请输入0-9之间的数字")


# 启动程序
if __name__ == "__main__":
    main()
